Performance of test function

Searches for the matrix with the higher probability of having a CGCGCG primer (only one solution). Minimizes 1-p(CGCGCG)

test.perf <- read.csv('~/mnt/edann/hexamers/strand_specific/test_function.performance.csv', header = FALSE, col.names = c('it','score'))
head(test.perf)

Test of real function

Functions for reshaping and plotting are in DE_performance.r

max(long.mat$iter)
[1] "999"
l <- lapply(seq(1,3), function(i) plot.iteration(long.mat, i))
# png('~/AvOwork/output/DE_optimization/test_iter_matrix.png')
for(el in l){
  # png(paste0("~/AvOwork/output/DE_optimization/DE_iter-", el$data$iter[1], ".png"))
  plot(el)
  # dev.off()
}

MIN RHO OF DIFFERENT TESTS

With bigger population size I get better scores and if the algorithm gets stuck in a local minimum it happens after more iterations.

rho.files.10 <- list.files(opt.dir, pattern='_pop10_its300.DE.rho.txt', full.names = TRUE)
rho.files.20 <- list.files(opt.dir, pattern='_pop20_its300.DE.rho.txt', full.names = TRUE)
rho.files.30 <- list.files(opt.dir, pattern='_pop30_its300.DE.rho.txt', full.names = TRUE)
plot.optimization.score(rho.files.10) +
  ggtitle('Pop.size=10')
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items

plot.optimization.score(rho.files.20) +
  ggtitle('Pop.size=20')
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items

plot.optimization.score(rho.files.30) +
  ggtitle('Pop.size=30')
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items
Read 300 items

Test on new optimization: maximizing density in region of interest

plot.optimization.score(score.ctcf.files) 
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items

performance.mat <- read.csv(matrix.ctcf.files[4], row.names = 1)
long.mat <- reshape.prob.mat(performance.mat)
Using iter as id variables
head(performance.mat)
nrow(performance.mat)
[1] 100
lapply(matrix.ctcf.files, function(mat) 
  plot.iteration(reshape.prob.mat(read.csv(mat, row.names = 1)),99) +
    ggtitle(gsub(mat, pattern = '.+//', replacement = '')))
Using iter as id variables
Using iter as id variables
Using iter as id variables
Using iter as id variables
Using iter as id variables
Using iter as id variables
Using iter as id variables
Using iter as id variables
Using iter as id variables
Using iter as id variables
[[1]]

[[2]]

[[3]]

[[4]]

[[5]]

[[6]]

[[7]]

[[8]]

[[9]]

[[10]]

Test4 is so weird! Best score and ends with all Ts!!

performance.mat <- read.csv(matrix.ctcf.files[5], row.names = 1)
long.mat <- reshape.prob.mat(performance.mat)
lapply(c(1,10,20,50,70,99),function(it) plot.iteration(long.mat, it))

What does the profile full of Ts look like?

bestmat.bw <- import(bestmat.bw.file, format = 'BigWig')
Error in import(bestmat.bw.file, format = "BigWig") : 
  could not find function "import"

Average coverage on CTCF sites

plot.refpoint.profile.df(not.norm.bestmat.df)
[1]   0 300 600

plot.refpoint.profile.df(norm.bestmat.df)
[1]   0 300 600

Optimizing density of enriched kmers

Not total abundance

  1. Popsize = 20
plot.optimization.score(score.ctcf.files) +
  theme(legend.title = element_blank())
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items

  1. Popsize = 30, 100 iterations
plot.optimization.score(score.ctcf.files) +
  theme(legend.title = element_blank())
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items

  1. Popsize = 30, 100 iterations
plot.optimization.score(score.ctcf.files) +
  theme(legend.title = element_blank())
Read 200 items
Read 200 items
Read 200 items
Read 200 items
Read 200 items
Read 200 items
Read 200 items
Read 200 items
Read 200 items
Read 200 items

Load coverage profiles around CTCF sites

prof.files <- list.files(paste0(opt.dir,'predicted_cov_bestmat'), pattern = 'profile.txt', full.names = T)
profiles <- lapply(prof.files, load.profile)
Read 600 items
Read 600 items
Read 600 items
Read 600 items
Read 600 items
Read 600 items
Read 600 items
names(profiles) <- gsub(prof.files, pattern = '.+500reg|.bestMat.+profile.txt', replacement = '')
df <- make.df.of.profiles(profiles)
best.scores <- sapply(score.ctcf.files, function(x) rev.default(scan(x))[1])
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
names(best.scores) <- gsub(names(best.scores), pattern = '.+/|.DE.+.txt', replacement = '')
df.wScores <- df %>% mutate(score=best.scores[match(df$sample, names(best.scores))])
df.wScores %>% 
  filter(sample!='test1_ctcf_kmersFC_pop30_its100') %>% 
  filter(sample!="test10_ctcf_kmersFC_pop30_its100") %>% 
  plot.refpoint.profile.df(., color = 'score') +
  guides(color = guide_colorbar(barwidth = 20, barheight = 1))
[1]   0 300 600

Not normalized

profiles <- lapply(prof.files, load.profile, normalize=F)
Read 600 items
Read 600 items
Read 600 items
Read 600 items
Read 600 items
Read 600 items
Read 600 items
names(profiles) <- gsub(prof.files, pattern = '.+500reg|.bestMat.+profile.txt', replacement = '')
df <- make.df.of.profiles(profiles)
best.scores <- sapply(score.ctcf.files, function(x) rev.default(scan(x))[1])
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
Read 100 items
Read 100 items
Read 200 items
names(best.scores) <- gsub(names(best.scores), pattern = '.+/|.DE.+.txt', replacement = '')
df.wScores <- df %>% mutate(score=best.scores[match(df$sample, names(best.scores))])
df.wScores %>% 
  filter(sample!='test1_ctcf_kmersFC_pop30_its100') %>% 
  filter(sample!="test10_ctcf_kmersFC_pop30_its100") %>% 
  plot.refpoint.profile.df(., color = 'score') +
  guides(color = guide_colorbar(barwidth = 20, barheight = 1))
[1]   0 300 600

Look at the coverage profiles in a set of regions for the best matrixes

plot.expVSpred.coverage.track(l.best.bw[[2]])
The following non-numeric data column has been dropped: id
[[1]]
Genome axis 'Axis'

[[2]]
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr1
| positions: 4999
| samples:1
| strand: * 

regionsWctcf
 [1] "chr1 (1.82535e+08,1.8269e+08]"  "chr10 (8.91e+06,9.78e+06]"      "chr11 (7.0175e+07,7.032e+07]"   "chr13 (5.801e+07,5.816e+07]"   
 [5] "chr13 (9.9375e+07,9.9725e+07]"  "chr14 (2.1045e+07,2.111e+07]"   "chr14 (6.985e+07,6.989e+07]"    "chr15 (5.847e+07,5.878e+07]"   
 [9] "chr17 (2.6425e+07,2.6595e+07]"  "chr17 (2.776e+07,2.8335e+07]"   "chr17 (2.776e+07,2.8335e+07]"   "chr18 (6.0855e+07,6.1005e+07]" 
[13] "chr18 (6.4525e+07,6.461e+07]"   "chr18 (6.727e+07,6.7355e+07]"   "chr19 (3.2715e+07,3.305e+07]"   "chr19 (4.366e+07,4.4e+07]"     
[17] "chr2 (1.2636e+08,1.26775e+08]"  "chr2 (1.5342e+08,1.53505e+08]"  "chr4 (9.78e+06,9.88e+06]"       "chr6 (3.416e+07,3.426e+07]"    
[21] "chr6 (8.3135e+07,8.323e+07]"    "chr6 (1.48705e+08,1.49265e+08]" "chr7 (2.524e+07,2.552e+07]"     "chr7 (2.8335e+07,2.946e+07]"   
[25] "chr7 (2.8335e+07,2.946e+07]"    "chr7 (9.7675e+07,9.8015e+07]"   "chr7 (1.4244e+08,1.4268e+08]"   "chr8 (2.4525e+07,2.481e+07]"   
[29] "chr8 (5.366e+07,5.367e+07]"     "chr8 (8.4695e+07,8.47e+07]"     "chr8 (8.4695e+07,8.47e+07]"     "chr8 (1.0857e+08,1.08725e+08]" 
[33] "chr9 (1.06345e+08,1.06605e+08]" "chrX (1.53505e+08,1.5367e+08]" 
lapply(sample(regionsWctcf,10), function(x) plot.cov.wAnnotation(l.best.bw[x][[1]], ctcf))
The following non-numeric data column has been dropped: id
[[1]]
[[1]]$Axis
Genome axis 'Axis'

[[1]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr1
| positions: 5000
| samples:1
| strand: * 

[[1]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr1
| annotation features: 1

[[1]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[2]]
[[2]]$Axis
Genome axis 'Axis'

[[2]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr19
| positions: 4999
| samples:1
| strand: * 

[[2]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr19
| annotation features: 1

[[2]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[3]]
[[3]]$Axis
Genome axis 'Axis'

[[3]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr7
| positions: 4999
| samples:1
| strand: * 

[[3]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr7
| annotation features: 2

[[3]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[4]]
[[4]]$Axis
Genome axis 'Axis'

[[4]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr14
| positions: 4999
| samples:1
| strand: * 

[[4]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr14
| annotation features: 1

[[4]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[5]]
[[5]]$Axis
Genome axis 'Axis'

[[5]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr17
| positions: 4999
| samples:1
| strand: * 

[[5]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr17
| annotation features: 2

[[5]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[6]]
[[6]]$Axis
Genome axis 'Axis'

[[6]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr8
| positions: 4999
| samples:1
| strand: * 

[[6]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr8
| annotation features: 2

[[6]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[7]]
[[7]]$Axis
Genome axis 'Axis'

[[7]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr13
| positions: 4999
| samples:1
| strand: * 

[[7]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr13
| annotation features: 1

[[7]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[8]]
[[8]]$Axis
Genome axis 'Axis'

[[8]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr18
| positions: 4999
| samples:1
| strand: * 

[[8]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr18
| annotation features: 1

[[8]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[9]]
[[9]]$Axis
Genome axis 'Axis'

[[9]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr17
| positions: 4999
| samples:1
| strand: * 

[[9]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr17
| annotation features: 2

[[9]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[10]]
[[10]]$Axis
Genome axis 'Axis'

[[10]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr8
| positions: 4999
| samples:1
| strand: * 

[[10]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr8
| annotation features: 2

[[10]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 

Compare with even primer probability predicted coverage

plot.expVSpred.coverage.track(l.comon.bw[[2]])
The following non-numeric data column has been dropped: id
[[1]]
Genome axis 'Axis'

[[2]]
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr1
| positions: 4999
| samples:2
| strand: * 

lapply(sample(regionsWctcf,10), function(x) plot.cov.wAnnotation(l.comon.bw[x][[1]], ctcf))
The following non-numeric data column has been dropped: id
[[1]]
[[1]]$Axis
Genome axis 'Axis'

[[1]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr8
| positions: 4999
| samples:2
| strand: * 

[[1]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr8
| annotation features: 1

[[1]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[2]]
[[2]]$Axis
Genome axis 'Axis'

[[2]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr19
| positions: 4999
| samples:2
| strand: * 

[[2]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr19
| annotation features: 1

[[2]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[3]]
[[3]]$Axis
Genome axis 'Axis'

[[3]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr7
| positions: 4999
| samples:2
| strand: * 

[[3]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr7
| annotation features: 1

[[3]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[4]]
[[4]]$Axis
Genome axis 'Axis'

[[4]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr8
| positions: 4999
| samples:2
| strand: * 

[[4]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr8
| annotation features: 1

[[4]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[5]]
[[5]]$Axis
Genome axis 'Axis'

[[5]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr7
| positions: 4999
| samples:2
| strand: * 

[[5]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr7
| annotation features: 2

[[5]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[6]]
[[6]]$Axis
Genome axis 'Axis'

[[6]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr18
| positions: 4999
| samples:2
| strand: * 

[[6]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr18
| annotation features: 1

[[6]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[7]]
[[7]]$Axis
Genome axis 'Axis'

[[7]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr6
| positions: 4999
| samples:2
| strand: * 

[[7]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr6
| annotation features: 1

[[7]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[8]]
[[8]]$Axis
Genome axis 'Axis'

[[8]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr2
| positions: 5000
| samples:2
| strand: * 

[[8]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr2
| annotation features: 1

[[8]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[9]]
[[9]]$Axis
Genome axis 'Axis'

[[9]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr4
| positions: 4999
| samples:2
| strand: * 

[[9]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr4
| annotation features: 1

[[9]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 




[[10]]
[[10]]$Axis
Genome axis 'Axis'

[[10]]$`norm. coverage`
DataTrack 'norm. coverage'
| genome: NA
| active chromosome: chr1
| positions: 5000
| samples:2
| strand: * 

[[10]]$CTCF
AnnotationTrack 'CTCF'
| genome: NA
| active chromosome: chr1
| annotation features: 1

[[10]]$titles
An object of class "ImageMap"
Slot "coords":
               x1        y1       x2        y2
Axis            6  37.24747 38.42335  77.20723
norm. coverage  6  77.20723 38.42335 278.26342
CTCF            6 278.26342 38.42335 318.47466

Slot "tags":
$title
            Axis   norm. coverage             CTCF 
          "Axis" "norm. coverage"           "CTCF" 

plot.refpoint.profile.df(df)
[1]   0 300 600

But here I am comparing noisy data (500 regions) and not noisy data (5000 regions)

EVEN COVERAGE

plot.optimization.score(score.even.files) +
  theme(legend.title = element_blank())
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items
Read 100 items

Variability in the initial population

Doesn’t seem to play a major role.

Visualizing in another way

Nope.

LS0tCnRpdGxlOiAiREUgcGVyZm9ybWFuY2UiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KYGBge3IgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZ2dyZXBlbCkKbGlicmFyeShyZXNoYXBlMikKbGlicmFyeShydHJhY2tsYXllcikKbGlicmFyeShzaGlueSkKc291cmNlKCd+L0hleGFtZXJCaWFzL2FydGlmaWNpYWxfY292ZXJhZ2UvY29tcGFyZV9wZWFrcy5yJykKYGBgCiMjIFBlcmZvcm1hbmNlIG9mIHRlc3QgZnVuY3Rpb24KU2VhcmNoZXMgZm9yIHRoZSBtYXRyaXggd2l0aCB0aGUgaGlnaGVyIHByb2JhYmlsaXR5IG9mIGhhdmluZyBhIENHQ0dDRyBwcmltZXIgKG9ubHkgb25lIHNvbHV0aW9uKS4gTWluaW1pemVzIDEtcChDR0NHQ0cpCmBgYHtyfQp0ZXN0LnBlcmYgPC0gcmVhZC5jc3YoJ34vbW50L2VkYW5uL2hleGFtZXJzL3N0cmFuZF9zcGVjaWZpYy90ZXN0X2Z1bmN0aW9uLnBlcmZvcm1hbmNlLmNzdicsIGhlYWRlciA9IEZBTFNFLCBjb2wubmFtZXMgPSBjKCdpdCcsJ3Njb3JlJykpCmhlYWQodGVzdC5wZXJmKQpgYGAKCmBgYHtyfQpnZ3Bsb3QodGVzdC5wZXJmLCBhZXMoaXQsc2NvcmUpKSArCiAgZ2VvbV9saW5lKCkKYGBgCgojIyMgVGVzdCBvZiByZWFsIGZ1bmN0aW9uCkZ1bmN0aW9ucyBmb3IgcmVzaGFwaW5nIGFuZCBwbG90dGluZyBhcmUgaW4gREVfcGVyZm9ybWFuY2UucgpgYGB7cn0Kb3B0LmRpciA8LSAnfi9tbnQvZWRhbm4vaGV4YW1lcnMvREVvcHRpbWl6YXRpb24vZXZlbl9jb3YvJwptYXRyaXguZmlsZXMgPC0gbGlzdC5maWxlcyhvcHQuZGlyLCBwYXR0ZXJuID0gJ21hdHJpeC5jc3YnLCBmdWxsLm5hbWVzID0gVFJVRSkKcGVyZm9ybWFuY2UubWF0IDwtIHJlYWQuY3N2KG1hdHJpeC5maWxlc1sxXSwgcm93Lm5hbWVzID0gMSkKaGVhZChwZXJmb3JtYW5jZS5tYXQpCmBgYAoKYGBge3J9CmxvbmcubWF0IDwtIHJlc2hhcGUucHJvYi5tYXQocGVyZm9ybWFuY2UubWF0KQpoZWFkKGxvbmcubWF0KQptYXgobG9uZy5tYXQkaXRlcikKYGBgCgpgYGB7cn0KbCA8LSBsYXBwbHkoc2VxKDEsMyksIGZ1bmN0aW9uKGkpIHBsb3QuaXRlcmF0aW9uKGxvbmcubWF0LCBpKSkKIyBwbmcoJ34vQXZPd29yay9vdXRwdXQvREVfb3B0aW1pemF0aW9uL3Rlc3RfaXRlcl9tYXRyaXgucG5nJykKZm9yKGVsIGluIGwpewogICMgcG5nKHBhc3RlMCgifi9Bdk93b3JrL291dHB1dC9ERV9vcHRpbWl6YXRpb24vREVfaXRlci0iLCBlbCRkYXRhJGl0ZXJbMV0sICIucG5nIikpCiAgcGxvdChlbCkKICAjIGRldi5vZmYoKQp9CmBgYAoKIyMjIE1JTiBSSE8gT0YgRElGRkVSRU5UIFRFU1RTCgpXaXRoIGJpZ2dlciBwb3B1bGF0aW9uIHNpemUgSSBnZXQgYmV0dGVyIHNjb3JlcyBhbmQgaWYgdGhlIGFsZ29yaXRobSBnZXRzIHN0dWNrIGluIGEgbG9jYWwgbWluaW11bSBpdCBoYXBwZW5zIGFmdGVyIG1vcmUgaXRlcmF0aW9ucy4KYGBge3J9CnJoby5maWxlcy4xMCA8LSBsaXN0LmZpbGVzKG9wdC5kaXIsIHBhdHRlcm49J19wb3AxMF9pdHMzMDAuREUucmhvLnR4dCcsIGZ1bGwubmFtZXMgPSBUUlVFKQpyaG8uZmlsZXMuMjAgPC0gbGlzdC5maWxlcyhvcHQuZGlyLCBwYXR0ZXJuPSdfcG9wMjBfaXRzMzAwLkRFLnJoby50eHQnLCBmdWxsLm5hbWVzID0gVFJVRSkKcmhvLmZpbGVzLjMwIDwtIGxpc3QuZmlsZXMob3B0LmRpciwgcGF0dGVybj0nX3BvcDMwX2l0czMwMC5ERS5yaG8udHh0JywgZnVsbC5uYW1lcyA9IFRSVUUpCgpwbG90Lm9wdGltaXphdGlvbi5zY29yZShyaG8uZmlsZXMuMTApICsKICBnZ3RpdGxlKCdQb3Auc2l6ZT0xMCcpCgpwbG90Lm9wdGltaXphdGlvbi5zY29yZShyaG8uZmlsZXMuMjApICsKICBnZ3RpdGxlKCdQb3Auc2l6ZT0yMCcpCgpwbG90Lm9wdGltaXphdGlvbi5zY29yZShyaG8uZmlsZXMuMzApICsKICBnZ3RpdGxlKCdQb3Auc2l6ZT0zMCcpCgpgYGAKIyMgVGVzdCBvbiBuZXcgb3B0aW1pemF0aW9uOiBtYXhpbWl6aW5nIGRlbnNpdHkgaW4gcmVnaW9uIG9mIGludGVyZXN0CmBgYHtyfQpvcHQuZGlyIDwtICd+L21udC9lZGFubi9oZXhhbWVycy9ERW9wdGltaXphdGlvbi9jdGNmX2Nvdi8nCm1hdHJpeC5maWxlcyA8LSBsaXN0LmZpbGVzKG9wdC5kaXIsIHBhdHRlcm4gPSAnLittaW5pbWl6ZS4rbWF0cml4LmNzdicsIGZ1bGwubmFtZXMgPSBUUlVFKQpwZXJmb3JtYW5jZS5tYXQgPC0gcmVhZC5jc3YoIn4vbW50L2VkYW5uL2hleGFtZXJzL0RFb3B0aW1pemF0aW9uL2V2ZW5fY292L3Rlc3QxX2N0Y2YuREUubWF0cml4LmNzdiIsIHJvdy5uYW1lcyA9IDEpCnBlcmZvcm1hbmNlLm1hdApwbG90Lml0ZXJhdGlvbihyZXNoYXBlLnByb2IubWF0KHBlcmZvcm1hbmNlLm1hdCksMSkKcGxvdC5pdGVyYXRpb24ocmVzaGFwZS5wcm9iLm1hdChwZXJmb3JtYW5jZS5tYXQpLDk5KQoKYGBgCmBgYHtyfQpzY29yZS5jdGNmLmZpbGVzIDwtIGxpc3QuZmlsZXMob3B0LmRpciwgcGF0dGVybiA9ICcuK2N0Y2YuK3Joby50eHQnLCBmdWxsLm5hbWVzID0gVFJVRSkKcGxvdC5vcHRpbWl6YXRpb24uc2NvcmUoc2NvcmUuY3RjZi5maWxlcykgCmBgYApgYGB7cn0KbWF0cml4LmN0Y2YuZmlsZXMgPC0gbGlzdC5maWxlcyhvcHQuZGlyLCBwYXR0ZXJuID0gJy4rY3RjZi4rbWF0cml4JywgZnVsbC5uYW1lcyA9IFRSVUUpCm1hdHJpeC5jdGNmLmZpbGVzCnBlcmZvcm1hbmNlLm1hdCA8LSByZWFkLmNzdihtYXRyaXguY3RjZi5maWxlc1s0XSwgcm93Lm5hbWVzID0gMSkKbG9uZy5tYXQgPC0gcmVzaGFwZS5wcm9iLm1hdChwZXJmb3JtYW5jZS5tYXQpCmhlYWQocGVyZm9ybWFuY2UubWF0KQpucm93KHBlcmZvcm1hbmNlLm1hdCkKbGFwcGx5KG1hdHJpeC5jdGNmLmZpbGVzLCBmdW5jdGlvbihtYXQpIAogIHBsb3QuaXRlcmF0aW9uKHJlc2hhcGUucHJvYi5tYXQocmVhZC5jc3YobWF0LCByb3cubmFtZXMgPSAxKSksOTkpICsKICAgIGdndGl0bGUoZ3N1YihtYXQsIHBhdHRlcm4gPSAnLisvLycsIHJlcGxhY2VtZW50ID0gJycpKSkKYGBgCgpUZXN0NCBpcyBzbyB3ZWlyZCEgQmVzdCBzY29yZSBhbmQgZW5kcyB3aXRoIGFsbCBUcyEhCmBgYHtyfQpwZXJmb3JtYW5jZS5tYXQgPC0gcmVhZC5jc3YobWF0cml4LmN0Y2YuZmlsZXNbNV0sIHJvdy5uYW1lcyA9IDEpCmxvbmcubWF0IDwtIHJlc2hhcGUucHJvYi5tYXQocGVyZm9ybWFuY2UubWF0KQpsYXBwbHkoYygxLDEwLDIwLDUwLDcwLDk5KSxmdW5jdGlvbihpdCkgcGxvdC5pdGVyYXRpb24obG9uZy5tYXQsIGl0KSkKYGBgCgojIFdoYXQgZG9lcyB0aGUgcHJvZmlsZSBmdWxsIG9mIFRzIGxvb2sgbGlrZT8KYGBge3J9CmJlc3RtYXQuYncuZmlsZSA8LSAnfi9tbnQvZWRhbm4vaGV4YW1lcnMvc3RyYW5kX3NwZWNpZmljL2FydGlmaWNpYWxfY292ZXJhZ2UvaGlnaGNvdi5yYW5kb20uNDJ0ZXN0MV9jdGNmX2Jlc3RNYXQuY292ZXJhZ2UuYXJ0Q292LmJ3JwpleHAuYncuZmlsZSA8LSAnfi9tbnQvZWRhbm4vaGV4YW1lcnMvc3RyYW5kX3NwZWNpZmljL1ZBTjE2Njdfc2UuaGlnaGNvdjQyLmJlZEdyYXBoJwoKYmVzdG1hdC5idyA8LSBpbXBvcnQoYmVzdG1hdC5idy5maWxlLCBmb3JtYXQgPSAnQmlnV2lnJykKcmFuZ2VzIDwtIEdSYW5nZXMoc2VxbmFtZXMgPSBwcmVkLmJ3QHNlcW5hbWVzLCAKICAgICAgICAgICAgICAgICAgcmFuZ2VzID0gSVJhbmdlcyhzdGFydD1wcmVkLmJ3QHJhbmdlc0BzdGFydCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gcHJlZC5id0ByYW5nZXNAc3RhcnQrMSkpCmV4cC5idyA8LSBpbXBvcnQoZXhwLmJ3LmZpbGUsIGZvcm1hdCA9ICdiZWRHcmFwaCcsIHdoaWNoID0gcmFuZ2VzKQpgYGAKIyBBdmVyYWdlIGNvdmVyYWdlIG9uIENUQ0Ygc2l0ZXMKYGBge3J9CmJlc3RtYXQucHJvZi5ub3JtIDwtIGxvYWQucHJvZmlsZSgnfi9tbnQvZWRhbm4vaGV4YW1lcnMvc3RyYW5kX3NwZWNpZmljL2FydGlmaWNpYWxfY292ZXJhZ2UvaGlnaGNvdi5yYW5kb20uNDJ0ZXN0MV9jdGNmX2Jlc3RNYXQuY292ZXJhZ2UuYXJ0Q292LkNUQ0YucHJvZmlsZS50eHQnLCBub3JtYWxpemUgPSBGKQpiZXN0bWF0VFQucHJvZi5ub3JtIDwtIGxvYWQucHJvZmlsZSgnfi9tbnQvZWRhbm4vaGV4YW1lcnMvc3RyYW5kX3NwZWNpZmljL2FydGlmaWNpYWxfY292ZXJhZ2UvaGlnaGNvdi5yYW5kb20uNDJ0ZXN0Nl9jdGNmX2Jlc3RtYXQuY292ZXJhZ2UuYXJ0Q292LkNUQ0YucHJvZmlsZS50eHQnLCBub3JtYWxpemUgPSBGKQpDVENGLnByZWQubm9ybSA8LSBsb2FkLnByb2ZpbGUoJ34vbW50L2VkYW5uL2hleGFtZXJzL3N0cmFuZF9zcGVjaWZpYy9hcnRpZmljaWFsX2NvdmVyYWdlL2hpZ2hjb3YucmFuZG9tLjQyLmFydENvdi5DVENGLnByb2ZpbGUudHh0Jywgbm9ybWFsaXplID0gRikKCm5vdC5ub3JtLmJlc3RtYXQuZGYgPC0gbWFrZS5kZi5vZi5wcm9maWxlcyhsaXN0KHBvbHlUPWJlc3RtYXRUVC5wcm9mLm5vcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3QubWF0cml4Mj1iZXN0bWF0LnByb2Yubm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbi5ldmVuPUNUQ0YucHJlZC5ub3JtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJlZGljdGlvbi5wcm9wb3J0aW9uYWw9Q1RDRi5wcmVkLnByb3AKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoKYmVzdG1hdC5wcm9mLm5vcm0gPC0gbG9hZC5wcm9maWxlKCd+L21udC9lZGFubi9oZXhhbWVycy9zdHJhbmRfc3BlY2lmaWMvYXJ0aWZpY2lhbF9jb3ZlcmFnZS9oaWdoY292LnJhbmRvbS40MnRlc3QxX2N0Y2ZfYmVzdE1hdC5jb3ZlcmFnZS5hcnRDb3YuQ1RDRi5wcm9maWxlLnR4dCcpCmJlc3RtYXRUVC5wcm9mLm5vcm0gPC0gbG9hZC5wcm9maWxlKCd+L21udC9lZGFubi9oZXhhbWVycy9zdHJhbmRfc3BlY2lmaWMvYXJ0aWZpY2lhbF9jb3ZlcmFnZS9oaWdoY292LnJhbmRvbS40MnRlc3Q2X2N0Y2ZfYmVzdG1hdC5jb3ZlcmFnZS5hcnRDb3YuQ1RDRi5wcm9maWxlLnR4dCcpCkNUQ0YucHJlZC5ub3JtIDwtIGxvYWQucHJvZmlsZSgnfi9tbnQvZWRhbm4vaGV4YW1lcnMvc3RyYW5kX3NwZWNpZmljL2FydGlmaWNpYWxfY292ZXJhZ2UvaGlnaGNvdi5yYW5kb20uNDIuYXJ0Q292LkNUQ0YucHJvZmlsZS50eHQnKQoKbm9ybS5iZXN0bWF0LmRmIDwtIG1ha2UuZGYub2YucHJvZmlsZXMobGlzdChwb2x5VD1iZXN0bWF0VFQucHJvZi5ub3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0Lm1hdHJpeDI9YmVzdG1hdC5wcm9mLm5vcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb24uZXZlbj1DVENGLnByZWQubm9ybQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHByZWRpY3Rpb24ucHJvcG9ydGlvbmFsPUNUQ0YucHJlZC5wcm9wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKCnBsb3QucmVmcG9pbnQucHJvZmlsZS5kZihub3Qubm9ybS5iZXN0bWF0LmRmKQpwbG90LnJlZnBvaW50LnByb2ZpbGUuZGYobm9ybS5iZXN0bWF0LmRmKQpgYGAKIyMgT3B0aW1pemluZyBkZW5zaXR5IG9mIGVucmljaGVkIGttZXJzCk5vdCB0b3RhbCBhYnVuZGFuY2UKCjEuIFBvcHNpemUgPSAyMApgYGB7cn0Kb3B0LmRpciA8LSAnfi9tbnQvZWRhbm4vaGV4YW1lcnMvREVvcHRpbWl6YXRpb24vY3RjZl9jb3YvJwpzY29yZS5jdGNmLmZpbGVzIDwtIGxpc3QuZmlsZXMob3B0LmRpciwgcGF0dGVybiA9ICcuK2N0Y2Zfa21lcnNGQy4rcG9wMjAuK3Joby50eHQnLCBmdWxsLm5hbWVzID0gVFJVRSkKcGxvdC5vcHRpbWl6YXRpb24uc2NvcmUoc2NvcmUuY3RjZi5maWxlcykgKwogIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSkKYGBgCjIuIFBvcHNpemUgPSAzMCwgMTAwIGl0ZXJhdGlvbnMKYGBge3J9Cm9wdC5kaXIgPC0gJ34vbW50L2VkYW5uL2hleGFtZXJzL0RFb3B0aW1pemF0aW9uL2N0Y2ZfY292LycKc2NvcmUuY3RjZi5maWxlcyA8LSBsaXN0LmZpbGVzKG9wdC5kaXIsIHBhdHRlcm4gPSAnLitjdGNmX2ttZXJzRkMuK3BvcDMwX2l0czEwMC4rcmhvLnR4dCcsIGZ1bGwubmFtZXMgPSBUUlVFKQpwbG90Lm9wdGltaXphdGlvbi5zY29yZShzY29yZS5jdGNmLmZpbGVzKSArCiAgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpKQpgYGAKMi4gUG9wc2l6ZSA9IDMwLCAxMDAgaXRlcmF0aW9ucwpgYGB7cn0Kb3B0LmRpciA8LSAnfi9tbnQvZWRhbm4vaGV4YW1lcnMvREVvcHRpbWl6YXRpb24vY3RjZl9jb3YvJwpzY29yZS5jdGNmLmZpbGVzIDwtIGxpc3QuZmlsZXMob3B0LmRpciwgcGF0dGVybiA9ICcuK2N0Y2Zfa21lcnNGQy4rcG9wLityaG8udHh0JywgZnVsbC5uYW1lcyA9IFRSVUUpCnBsb3Qub3B0aW1pemF0aW9uLnNjb3JlKHNjb3JlLmN0Y2YuZmlsZXMpICsKICB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpCmBgYApMb2FkIGNvdmVyYWdlIHByb2ZpbGVzIGFyb3VuZCBDVENGIHNpdGVzCmBgYHtyfQpwcm9mLmZpbGVzIDwtIGxpc3QuZmlsZXMocGFzdGUwKG9wdC5kaXIsJ3ByZWRpY3RlZF9jb3ZfYmVzdG1hdCcpLCBwYXR0ZXJuID0gJ3Byb2ZpbGUudHh0JywgZnVsbC5uYW1lcyA9IFQpCnByb2ZpbGVzIDwtIGxhcHBseShwcm9mLmZpbGVzLCBsb2FkLnByb2ZpbGUpCm5hbWVzKHByb2ZpbGVzKSA8LSBnc3ViKHByb2YuZmlsZXMsIHBhdHRlcm4gPSAnLis1MDByZWd8LmJlc3RNYXQuK3Byb2ZpbGUudHh0JywgcmVwbGFjZW1lbnQgPSAnJykKZGYgPC0gbWFrZS5kZi5vZi5wcm9maWxlcyhwcm9maWxlcykKCmJlc3Quc2NvcmVzIDwtIHNhcHBseShzY29yZS5jdGNmLmZpbGVzLCBmdW5jdGlvbih4KSByZXYuZGVmYXVsdChzY2FuKHgpKVsxXSkKbmFtZXMoYmVzdC5zY29yZXMpIDwtIGdzdWIobmFtZXMoYmVzdC5zY29yZXMpLCBwYXR0ZXJuID0gJy4rL3wuREUuKy50eHQnLCByZXBsYWNlbWVudCA9ICcnKQpkZi53U2NvcmVzIDwtIGRmICU+JSBtdXRhdGUoc2NvcmU9YmVzdC5zY29yZXNbbWF0Y2goZGYkc2FtcGxlLCBuYW1lcyhiZXN0LnNjb3JlcykpXSkKZGYud1Njb3JlcyAlPiUgCiAgZmlsdGVyKHNhbXBsZSE9J3Rlc3QxX2N0Y2Zfa21lcnNGQ19wb3AzMF9pdHMxMDAnKSAlPiUgCiAgZmlsdGVyKHNhbXBsZSE9InRlc3QxMF9jdGNmX2ttZXJzRkNfcG9wMzBfaXRzMTAwIikgJT4lIAogIHBsb3QucmVmcG9pbnQucHJvZmlsZS5kZiguLCBjb2xvciA9ICdzY29yZScpICsKICBndWlkZXMoY29sb3IgPSBndWlkZV9jb2xvcmJhcihiYXJ3aWR0aCA9IDIwLCBiYXJoZWlnaHQgPSAxKSkKYGBgCgoKTm90IG5vcm1hbGl6ZWQgCmBgYHtyfQpwcm9maWxlcyA8LSBsYXBwbHkocHJvZi5maWxlcywgbG9hZC5wcm9maWxlLCBub3JtYWxpemU9RikKbmFtZXMocHJvZmlsZXMpIDwtIGdzdWIocHJvZi5maWxlcywgcGF0dGVybiA9ICcuKzUwMHJlZ3wuYmVzdE1hdC4rcHJvZmlsZS50eHQnLCByZXBsYWNlbWVudCA9ICcnKQpkZiA8LSBtYWtlLmRmLm9mLnByb2ZpbGVzKHByb2ZpbGVzKQoKYmVzdC5zY29yZXMgPC0gc2FwcGx5KHNjb3JlLmN0Y2YuZmlsZXMsIGZ1bmN0aW9uKHgpIHJldi5kZWZhdWx0KHNjYW4oeCkpWzFdKQpuYW1lcyhiZXN0LnNjb3JlcykgPC0gZ3N1YihuYW1lcyhiZXN0LnNjb3JlcyksIHBhdHRlcm4gPSAnLisvfC5ERS4rLnR4dCcsIHJlcGxhY2VtZW50ID0gJycpCmRmLndTY29yZXMgPC0gZGYgJT4lIG11dGF0ZShzY29yZT1iZXN0LnNjb3Jlc1ttYXRjaChkZiRzYW1wbGUsIG5hbWVzKGJlc3Quc2NvcmVzKSldKQpkZi53U2NvcmVzICU+JSAKICBmaWx0ZXIoc2FtcGxlIT0ndGVzdDFfY3RjZl9rbWVyc0ZDX3BvcDMwX2l0czEwMCcpICU+JSAKICBmaWx0ZXIoc2FtcGxlIT0idGVzdDEwX2N0Y2Zfa21lcnNGQ19wb3AzMF9pdHMxMDAiKSAlPiUgCiAgcGxvdC5yZWZwb2ludC5wcm9maWxlLmRmKC4sIGNvbG9yID0gJ3Njb3JlJykgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2NvbG9yYmFyKGJhcndpZHRoID0gMjAsIGJhcmhlaWdodCA9IDEpKQpgYGAKIyMgTG9vayBhdCB0aGUgY292ZXJhZ2UgcHJvZmlsZXMgaW4gYSBzZXQgb2YgcmVnaW9ucyBmb3IgdGhlIGJlc3QgbWF0cml4ZXMKYGBge3J9CmRmLndTY29yZXMgJT4lIGFycmFuZ2Uoc2NvcmUpICU+JSBoZWFkKC4pCnByZWQuYncuZmlsZSA8LSAnfi9tbnQvZWRhbm4vaGV4YW1lcnMvREVvcHRpbWl6YXRpb24vY3RjZl9jb3YvcHJlZGljdGVkX2Nvdl9iZXN0bWF0L2hpZ2hjb3YucmFuZG9tLjQyLjUwMHJlZ3Rlc3Q5X2N0Y2Zfa21lcnNGQ19wb3AzMF9pdHMyMDAuYmVzdE1hdC5jb3ZlcmFnZS5hcnRDb3YuYncnCnByZWQuYncgPC0gaW1wb3J0KHByZWQuYncuZmlsZSwgZm9ybWF0ID0gJ0JpZ1dpZycpCmJlc3QuYncgPC0gYWRkLmlkKHByZWQuYncpCm5vcm0uYmVzdC5idyA8LSBub3JtYWxpemUuY292ZXJhZ2UoYmVzdC5idykKbC5iZXN0LmJ3IDwtIHNwbGl0KG5vcm0uYmVzdC5idywgYmVzdC5idyRpZCkKcGxvdC5leHBWU3ByZWQuY292ZXJhZ2UudHJhY2sobC5iZXN0LmJ3W1syXV0pCmBgYAoKYGBge3J9CmN0Y2YuYmVkIDwtICd+L21udC9lZGFubi9oZXhhbWVycy9hbm5vdGF0aW9uc19iZWQvQ1RDRl9pbnRlc3RpbmVfbW0xMC5zcnQuYmVkJwpjdGNmPC0gaW1wb3J0KGN0Y2YuYmVkLCBmb3JtYXQgPSAnYmVkJykKCmN0Y2Yub3ZzIDwtIGZpbmRPdmVybGFwcyhub3JtLmJlc3QuYncsY3RjZikKY3RjZi5jb3YgPC0gbm9ybS5iZXN0LmJ3W3F1ZXJ5SGl0cyhjdGNmLm92cyldCnJlZ2lvbnNXY3RjZiA8LSBjdGNmLmNvdiRpZApgYGAKCmBgYHtyfQpsYXBwbHkoc2FtcGxlKHJlZ2lvbnNXY3RjZiwxMCksIGZ1bmN0aW9uKHgpIHBsb3QuY292LndBbm5vdGF0aW9uKGwuYmVzdC5id1t4XVtbMV1dLCBjdGNmKSkKYGBgCkNvbXBhcmUgd2l0aCBldmVuIHByaW1lciBwcm9iYWJpbGl0eSBwcmVkaWN0ZWQgY292ZXJhZ2UKYGBge3J9CmV2ZW4uYncgPC0gJ34vbW50L2VkYW5uL2hleGFtZXJzL3N0cmFuZF9zcGVjaWZpYy9hcnRpZmljaWFsX2NvdmVyYWdlL2hpZ2hjb3YucmFuZG9tLjQyLmFydENvdi5idycKcmFuZ2VzIDwtIEdSYW5nZXMoc2VxbmFtZXMgPSBwcmVkLmJ3QHNlcW5hbWVzLCAKICAgICAgICAgICAgICAgICAgcmFuZ2VzID0gSVJhbmdlcyhzdGFydD1wcmVkLmJ3QHJhbmdlc0BzdGFydCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gcHJlZC5id0ByYW5nZXNAc3RhcnQrMSkpCmV4cC5idyA8LSBpbXBvcnQoZXZlbi5idywgZm9ybWF0ID0gJ0JpZ1dpZycsIHdoaWNoID0gcmFuZ2VzKQpjb21tb24uYncgPC0gbWFrZS5wcmVkVlNleHAucmFuZ2UocHJlZC5idywgZXhwLmJ3LCBwcmVkLm5hbWUgPSAnQ1RDRnNwZWNpZmljJywgZXhwLm5hbWUgPSAnZXZlbicpCm5vcm0uY29tbW9uLmJ3PC0gbm9ybWFsaXplLmNvdmVyYWdlKGNvbW1vbi5idykKbm9ybS5jb21tb24uYncgPC0gYWRkLmlkKG5vcm0uY29tbW9uLmJ3KQpsLmNvbW9uLmJ3IDwtIHNwbGl0KG5vcm0uY29tbW9uLmJ3LCBub3JtLmNvbW1vbi5idyRpZCkKcGxvdC5leHBWU3ByZWQuY292ZXJhZ2UudHJhY2sobC5jb21vbi5id1tbMl1dKQoKY3RjZi5vdnMgPC0gZmluZE92ZXJsYXBzKG5vcm0uY29tbW9uLmJ3LGN0Y2YpCmN0Y2YuY292IDwtIG5vcm0uY29tbW9uLmJ3W3F1ZXJ5SGl0cyhjdGNmLm92cyldCnJlZ2lvbnNXY3RjZiA8LSBjdGNmLmNvdiRpZApgYGAKCmBgYHtyfQpsYXBwbHkoc2FtcGxlKHJlZ2lvbnNXY3RjZiwxMCksIGZ1bmN0aW9uKHgpIHBsb3QuY292LndBbm5vdGF0aW9uKGwuY29tb24uYndbeF1bWzFdXSwgY3RjZikpCmBgYApgYGB7cn0KZXZlbi5wcm9mIDwtIGxvYWQucHJvZmlsZSgnfi9tbnQvZWRhbm4vaGV4YW1lcnMvc3RyYW5kX3NwZWNpZmljL2FydGlmaWNpYWxfY292ZXJhZ2UvaGlnaGNvdi5yYW5kb20uNDIuYXJ0Q292LkNUQ0YucHJvZmlsZS50eHQnKQpjdGNmLnByb2YgPC0gbG9hZC5wcm9maWxlKCd+L21udC9lZGFubi9oZXhhbWVycy9ERW9wdGltaXphdGlvbi9jdGNmX2Nvdi9wcmVkaWN0ZWRfY292X2Jlc3RtYXQvaGlnaGNvdi5yYW5kb20uNDIuNTAwcmVndGVzdDlfY3RjZl9rbWVyc0ZDX3BvcDMwX2l0czIwMC5iZXN0TWF0LmNvdmVyYWdlLmFydENvdi5DVENGLnByb2ZpbGUudHh0JykKZGYgPC0gbWFrZS5kZi5vZi5wcm9maWxlcyhsaXN0KAogIENUQ0Y9Y3RjZi5wcm9mLAogIGV2ZW49ZXZlbi5wcm9mCikpCnBsb3QucmVmcG9pbnQucHJvZmlsZS5kZihkZikKYGBgCkJ1dCBoZXJlIEkgYW0gY29tcGFyaW5nIG5vaXN5IGRhdGEgKDUwMCByZWdpb25zKSBhbmQgbm90IG5vaXN5IGRhdGEgKDUwMDAgcmVnaW9ucykKCiMjIyBFVkVOIENPVkVSQUdFCmBgYHtyfQpvcHQuZGlyIDwtICd+L21udC9lZGFubi9oZXhhbWVycy9ERW9wdGltaXphdGlvbi9ldmVuX2Nvdi8nCnNjb3JlLmV2ZW4uZmlsZXMgPC0gbGlzdC5maWxlcyhvcHQuZGlyLCBwYXR0ZXJuID0gJy4rZXZlbl9wb3AzMF9pdHMxMDAuK3Joby50eHQnLCBmdWxsLm5hbWVzID0gVFJVRSkKcGxvdC5vcHRpbWl6YXRpb24uc2NvcmUoc2NvcmUuZXZlbi5maWxlcykgKwogIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSkKYGBgCgojIFZhcmlhYmlsaXR5IGluIHRoZSBpbml0aWFsIHBvcHVsYXRpb24KYGBge3J9Cm9yaWdpbmFsLnBvcC5nb29kIDwtIHJlYWQuY3N2KHBhc3RlMChvcHQuZGlyLCAndGVzdDVfZXZlbl9wb3AzMF9pdHMxMDAuREUub3JpZ2luYWxQb3AuY3N2JyksIHJvdy5uYW1lcyA9IDEpCm9yaWdpbmFsLnBvcC5iYWQgPC0gcmVhZC5jc3YocGFzdGUwKG9wdC5kaXIsICd0ZXN0MV9ldmVuX3BvcDMwX2l0czEwMC5ERS5vcmlnaW5hbFBvcC5jc3YnKSwgcm93Lm5hbWVzID0gMSkKCmJveHBsb3QoYXMudmVjdG9yKGNvcih0KG9yaWdpbmFsLnBvcC5iYWQpKSksIGFzLnZlY3Rvcihjb3IodChvcmlnaW5hbC5wb3AuZ29vZCkpKSwgeWxhYj0nY29ycmVsYXRpb24gYmV0d2VlbiB2ZWN0b3JzJywgbmFtZXM9YygnYmFkJywgJ2dvb2QnKSkKYGBgCkRvZXNuJ3Qgc2VlbSB0byBwbGF5IGEgbWFqb3Igcm9sZS4KClZpc3VhbGl6aW5nIGluIGFub3RoZXIgd2F5CmBgYHtyfQpvcmlnaW5hbHBvcC5ldmVuLmZpbGVzIDwtIGxpc3QuZmlsZXMob3B0LmRpciwgcGF0dGVybiA9ICcuK2V2ZW5fcG9wMzBfaXRzMTAwLitvcmlnaW5hbFBvcC5jc3YnLCBmdWxsLm5hbWVzID0gVFJVRSkKcG9wcyA8LSBsYXBwbHkob3JpZ2luYWxwb3AuZXZlbi5maWxlcyxmdW5jdGlvbih4KSByZWFkLmNzdih4LCByb3cubmFtZXMgPSAxKSAlPiUgcmVzaGFwZS5wcm9iLm1hdCAlPiUgbXV0YXRlKHA9cGFzdGUwKG51YywnLicscG9zKSwgbmFtZT1nc3ViKHgsIHBhdHRlcm4gPSAnLisvfC5ERS4rJywgcmVwbGFjZW1lbnQgPSAnJykpICkKbWVhbi5wb3BzIDwtIGRvLmNhbGwocmJpbmQscG9wcykKbWVhbi5wb3BzICU+JSBncm91cF9ieShuYW1lLG51YykgJT4lIHN1bW1hcmlzZShhdmc9bWVhbihwcm9iKSkgJT4lCiAgZ2dwbG90KC4sIGFlcyhudWMsIGF2ZywgZ3JvdXA9bmFtZSwgY29sb3I9bmFtZSkpICsKICAgIGZhY2V0X2dyaWQobmFtZX4uKSArCiAgICBnZW9tX2xpbmUoKSArCiAgICAjIHlsaW0oMCwxKSArIAogICAgeGxhYignbnVjbGVvdGlkZScpCmBgYApOb3BlLgoK